<?php
namespace App\Service;

use Illuminate\Support\Facades\DB;

class BaseService
{
    //基础服务

    protected $database = 'mysql'; //库名称
    protected $db; //表对象

    protected $dbUser = 'user'; //用户
    protected $dbUlog = 'user_login'; //登录LOG
    //protected $dbBank = 'user_bank'; //用户绑卡
    protected $dbCompany = 'company'; //公司
    protected $dbImage = 'image'; //图库
    //生成器
    protected $dbMkConfig = 'mk_config'; //生成器配置
    protected $dbItem = 'mk_item'; //项目库
    protected $dbMkUpload = 'mk_upload'; //用户设计图
    protected $dbMkWord = 'mk_word'; //功能库
    protected $dbMkUser = 'mku_word'; //用户功能库
    protected $dbMkPath = 'mk_path'; //用户项目目录
    protected $dbMkRar = 'mk_rar'; //上传压缩包
    //模板
    //tmp是fxotary模板
    protected $dbTmp = 'tmp_item'; //项目模板
    protected $dbTmpRar = 'tmp_rar'; //模板上传
    protected $dbTmpPath = 'tmp_path'; //项目模板目录
    protected $dbTmpMenu = 'tmp_menu'; //模板菜单
    protected $dbTmpUser = 'tmp_user'; //模板用户
    protected $dbTmpDoc = 'tmp_doc'; //模板接口文档
    protected $dbTmpDocLog = 'tmp_doc_log'; //模板接口请求日志
    protected $dbTmpData = 'tmp_data'; //模板数据
    protected $dbTmpCate = 'tmp_cate'; //项目分类
    //用户项目
    //xm是fxotary的模板
    protected $dbXm = 'xm_list';
    protected $dbXmPath = 'xm_path'; //项目目录
    protected $dbXmMenu = 'xm_menu'; //项目菜单
    protected $dbXmUser = 'xm_user'; //项目用户
    protected $dbXmData = 'xm_data'; //项目数据
    protected $dbXmDoc = 'xm_doc'; //项目接口文档
    protected $dbXmRar = 'xm_rar'; //用户打包下载

//    //有效天数枚举
//    public function userPeriodDayTypes(){
//        return [
//            1 => 1, 5, 7 ,15,
//        ];
//    }
//    //银行类型：1支付宝，2微信，3其他银行
//    protected $bankTypes = [
//        1 => '支付宝', '微信', '其他银行',
//    ];
//
//    //获取有效天数
//    public function getUserPeriodDay($type)
//    {
//        $types = $this->userPeriodDayTypes();
//        if ($type == 1) {
//            return 1;
//        } else if ($types == 2) {
//            return 5;
//        } else if ($types == 3) {
//            return 7;
//        } else if ($types == 4) {
//            return 15;
//        } else {
//            return 0;
//        }
//    }

    //用户角色类型
    protected $userRoleTypes = [
        1 => '用户', '代理商', '管理员',
    ];
    //用户主体类型
    protected $userBodyTypes = [
        1 => '个人', '企业',
    ];
    //用户数据库类型
    protected $userDbTypes = [
        1 => 'MySQL', 'SQLserver',
    ];

    //返回参数
    public function toback($code = 0, $msg = '', $data = [], $total = 0)
    {
        $msg = $msg ? $msg : 'success';
        return array('code' => $code, 'msg' => $msg, 'data' => $data, 'total' => $total);
    }

    /**
     * 查询列表
     * @param string $db 表名
     * @param array $w1s【参数名=>值】
     * @param array $w2s【参数名，操作符，值】
     * @param array $sels 字段数组（返回字段=>表字段）
     */
    public function dbQueryList($db, $w1s = [], $w2s = [], $sels = [])
    {
        $db = $this->dbConn($db);
        if (!empty($w1s)) {
            foreach ($w1s as $k => $v) {
                $db = $db->where($k, $v);
            }
        }
        if (!empty($w2s)) {
            foreach ($w2s as $v) {
                $db = $db->where($v['key'], $v['oper'], $v['val']);
            }
        }
        $lists = $db->get();
        return $this->listSelect($lists, $sels);
    }

    //列表指定字段转换
    public function listSelect($lists, $fields)
    {
        $arys = [];
        if (!count($lists)) {
            return $arys;
        }
        foreach ($lists as $v) {
            $v = (array) $v;
            $ary2s = [];
            foreach ($fields as $kk => $vv) {
                if (isset($v[$vv])) {
                    $ary2s[$kk] = $v[$vv];
                }
            }
            if (!empty($ary2s)) {
                $arys[] = $ary2s;
            }
        }
        return $arys;
    }

    /**
     * 查询一个
     * @param string $db 表名
     * @param array $iswheres【参数名=>值】
     * @param array $opers【0参数名，1操作符，2值】
     * @param array $sels 字段数组（返回字段=>表字段）
     */
    public function dbQueryOne($db, $w1s = [], $w2s = [], $sels = [])
    {
        $db = $this->dbConn($db);
        if (!empty($w1s)) {
            foreach ($w1s as $k => $v) {
                $db = $db->where($k, $v);
            }
        }
        if (!empty($w2s)) {
            foreach ($w2s as $v) {
                $db = $db->where($v[0], $v[1], $v[2]);
            }
        }
        $one = (array) $db->first();
        return $this->oneSelect($one, $sels);
    }

    //列表指定字段转换
    public function oneSelect($one, $fields)
    {
        if (empty($fields)) {
            return $one;
        }
        $arys = [];
        if (empty($one)) {
            return $arys;
        }
        foreach ($fields as $kk => $vv) {
            if (isset($one[$vv])) {
                $arys[$kk] = $one[$vv];
            }
        }
        return $arys;
    }

    /**
     * 插入一条
     * @param string $db 表名
     * @param array $pas 数据
     */
    public function dbInsertOne($db, $pas)
    {
        return $this->dbConn($db)->insertGetId($pas);
    }

    /**
     * 修改
     * @param string $db 表名
     * @param array $w1s【$key，$val】
     * @param array $pas 数据【$key，$val】
     */
    public function dbModify($db, $w1s, $pas)
    {
        $db = $this->dbConn($db);
        if (count($w1s)) {
            foreach ($w1s as $k => $v) {
                $db = $db->where($k, $v);
            }
        }
        return $db->update($pas);
    }

    /**
     * 连接数据库
     * @param string $db 表名
     * @param array $ws 查询条件【key=>val】
     */
    public function dbConn($db, $ws=[])
    {
        $db = DB::connection($this->database)->table($db);
        if (!empty($ws)) {
            foreach ($ws as $k => $v) {
                $db = $db->where($k, $v);
            }
        }
        return $db;
    }
}